package org.lanyu.springainovel.common.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.lanyu.springainovel.common.entity.AiModel;
import org.lanyu.springainovel.common.mapper.AiModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 模型管理 服务
 */
@Service
public class AiModelService {
    public AiModelService() { super(); }

    @Autowired
    private AiModelMapper aiModelMapper;


    /**
     * 获取所有模�?     * @return
     */
    public List<AiModel> findAll() {
        return aiModelMapper.selectList(null).stream()
            .sorted((m1, m2) -> {
                // 1. 首先按供应商排序
                int vendorCompare = String.valueOf(m1.getVendor()).compareToIgnoreCase(String.valueOf(m2.getVendor()));
                if (vendorCompare != 0) {
                    return vendorCompare;
                }
                
                // 2. 其次按启用状态排序（启用的记录靠前）
                int statusCompare = Integer.compare(m2.getStatus(), m1.getStatus());
                if (statusCompare != 0) {
                    return statusCompare;
                }
                
                // 3. 最后按更新时间倒序排序
                if (m1.getUpdateTime() != null && m2.getUpdateTime() != null) {
                    return m2.getUpdateTime().compareTo(m1.getUpdateTime());
                } else if (m1.getUpdateTime() != null) {
                    return -1; // m1有更新时间，m2没有，m1排在前面
                } else if (m2.getUpdateTime() != null) {
                    return 1; // m2有更新时间，m1没有，m2排在前面
                }
                
                // 如果都没有更新时间，按名称排序作为最后的排序条件
                return String.valueOf(m1.getName()).compareToIgnoreCase(String.valueOf(m2.getName()));
            })
            .toList();
    }

    /**
     * 根据筛选条件获取模型列�?     * @param type 功能类型（对�?嵌入�?     * @param tags 标签（逗号分隔�?     * @param vendor 系列（ollama/openai�?     * @param status 状态（1-可用�?-禁用�?     * @param context 上下文长�?     * @return
     */
    public List<AiModel> findByFilters(String type, String tags, String vendor, String status, String context) {
        QueryWrapper<AiModel> queryWrapper = new QueryWrapper<>();
        
        // 功能类型筛�?
        if (type != null && !type.trim().isEmpty()) {
            queryWrapper.eq("type", type);
        }
        
        // 系列筛�?
    if (vendor != null && !vendor.trim().isEmpty()) {
            queryWrapper.eq("vendor", vendor);
        }
        
        // 状态筛�?
        if (status != null && !status.trim().isEmpty()) {
            queryWrapper.eq("status", Integer.parseInt(status));
        }
        
        // 标签筛�?
        if (tags != null && !tags.trim().isEmpty()) {
            String[] tagArray = tags.split(",");
            for (String tag : tagArray) {
                if (!tag.trim().isEmpty()) {
                    queryWrapper.like("tags", tag.trim());
                }
            }
        }
        
        // 上下文长度筛选（这里可以根据实际需求实现）
        
        return aiModelMapper.selectList(queryWrapper).stream()
            .sorted((m1, m2) -> {
                // 1. 首先按供应商排序
                int vendorCompare = String.valueOf(m1.getVendor()).compareToIgnoreCase(String.valueOf(m2.getVendor()));
                if (vendorCompare != 0) {
                    return vendorCompare;
                }
                
                // 2. 其次按启用状态排序（启用的记录靠前）
                int statusCompare = Integer.compare(m2.getStatus(), m1.getStatus());
                if (statusCompare != 0) {
                    return statusCompare;
                }
                
                // 3. 最后按更新时间倒序排序
                if (m1.getUpdateTime() != null && m2.getUpdateTime() != null) {
                    return m2.getUpdateTime().compareTo(m1.getUpdateTime());
                } else if (m1.getUpdateTime() != null) {
                    return -1; // m1有更新时间，m2没有，m1排在前面
                } else if (m2.getUpdateTime() != null) {
                    return 1; // m2有更新时间，m1没有，m2排在前面
                }
                
                // 如果都没有更新时间，按名称排序作为最后的排序条件
                return String.valueOf(m1.getName()).compareToIgnoreCase(String.valueOf(m2.getName()));
            })
            .toList();
    }

    /**
     * 获取所有使用的模型
     * @param type  对话/嵌入
     * @return
     */
    public List<AiModel> findAllActive(String type) {
        QueryWrapper<AiModel> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("type", type).eq("status", 1);
        return aiModelMapper.selectList(queryWrapper);
    }

    public AiModel findById(Long modelId) {
        return aiModelMapper.selectById(modelId);
    }

    public AiModel save(AiModel model) {
        if (model.getId() == null ) {
            // 新增
            aiModelMapper.insert(model);
        } else {
            // 更新
            aiModelMapper.updateById(model);
        }
        // 注意：模型缓存更新现在由AIModelInitService统一处理
        return model;
    }

    public void deleteById(Long modelId) {
        AiModel model = aiModelMapper.selectById(modelId);
        if (model != null) {
            aiModelMapper.deleteById(modelId);
            // 注意：模型缓存清理现在由AIModelInitService统一处理
        }
    }
}
